#装饰器带变量参数
def deco(arg): #arg---->mymodule
    def _deco(func):
        def __deco():
            print("before %s call [%s]." %(func.__name__,arg))
            func()
            print("after %s call [%s]." %(func.__name__,arg))
        return __deco
    return _deco

#deco("mymodule")(myfunc)
#1)deco("mymodule")-->闭包：_deco+arg
#2）_deco(myfunc)-->闭包：__deco+arg+func

@deco("mymodule")  #等价于myfunc=deco("mymodule")(myfunc)
def myfunc():
    print("myfunc() called.")

@deco("mymodule2")  #等价于myfunc2=deco("mymodule")(myfunc)
def myfunc2():
    print("myfunc2() called.")

myfunc() #__deco(),func->myfunc,arg-->mymodule
myfunc2()  #__deco(),func->myfunc,arg-->mymodule2

#调用过程拆解
#1）myfunc=deco("mymodule")(myfunc)
#2)第一步调用deco（"mymodule"）返回X，第二步x(myfunc)--》返回y
#3）x的返回值是什么 ? deco(arg):arg--mymodule,x:_deco+mymodule
#4)_deco(myfunc)-->func-->myfunc返回值__deco+myfunc+mymodule
# 5)myfunc=__deco(闭包函数)+myfunc（闭包变量：被装饰函数）+mymodule(闭包变量：装饰参数)
# 6)myfunc() --->__deco()
# 7)输出结果